home *** CD-ROM | disk | FTP | other *** search
/ C/C++ Users Group Library 1996 July / C-C++ Users Group Library July 1996.iso / vol_200 / 297_02 / xread.spr < prev    next >
Text File  |  1980-01-01  |  2KB  |  101 lines

  1. /* xread.pro */
  2. /* xread is an extension of read */
  3. /* this predicate lets you read & retain the names of the variables */
  4. /* lookat the variable names verifer too,
  5.    It's helpful in bug finding if you take the habit of never
  6.    using a varriable other than an anonymous variable for
  7.    the occurences that are unique in a clause 
  8. */
  9.  
  10. ((xread X VarNameList)
  11.  (read X)
  12.  (var_name_list () 0 RVL)
  13.  (reverse RVL VarNameList)
  14. )
  15.  
  16. ((var_name_list Li Offset VL)
  17.  (var_name Offset VarName)
  18.  (cut)
  19.  (iplus Offset 1 Offset+1)
  20.  (var_name_list (VarName|Li) Offset+1 VL)
  21. )
  22. (var_name_list L _ L)
  23.  
  24. ((reverse L Li)
  25.  (reverse1 L () Li)
  26. )
  27.  
  28. ((reverse1 (X|Y) Li L)(reverse1 Y (X|Li) L))
  29. (reverse1 () L L)
  30.  
  31. ((xprint V VarNameList)
  32.  (var V)
  33.  (cut)
  34.  (var_offset V Offset)
  35.  (list_nth Offset VarNameList VarName)
  36.  (writes VarName)
  37. )
  38.  
  39. ((xprint X _)
  40.  (atomic X)
  41.  (display X)
  42. )
  43. ((xprint (A|B) VarNameList)
  44.  (writes "(")
  45.  (xprint_rest (A|B) VarNameList)
  46.  (writes ")") 
  47. )
  48. ((xprint_rest (A|B) VL)
  49.  (is_list B)
  50.  (cut)
  51.  (xprint A VL)
  52.  (writes " ")
  53.  (xprint_rest B VL)
  54. )
  55.  
  56. ((xprint_rest (A|B) VL)
  57.  (xprint A VL)
  58.  (writes "|")
  59.  (xprint B VL)
  60. )
  61. (xprint_rest () _)
  62.  
  63. ((is_list L )(nonvar L)(eq L (X|Y)))
  64. (is_list ())
  65.  
  66. /* read and print an expression without throwing the variable names away*/
  67. ((xread_print )
  68.  (xread X VL)
  69.  (xprint X VL)
  70. )
  71.  
  72. /* check if varnamelist contains a name other than "_" which is
  73.   unique in that clause.
  74. */
  75.  
  76. ((unique_name Seen Name ToSee)
  77.  (diff Name "_")
  78.  (unique_occurence Name ToSee)
  79.  (not (member Name Seen))
  80. )
  81. ((unique_occurence Name (Name|L))
  82.  (not (member Name L))
  83. )
  84. ((unique_names L)
  85.  (unique_names1 () L)
  86. )
  87. ((unique_names1 Seen (X|L))
  88.  (unique_name Seen X L)
  89. )
  90. ((unique_names1 Seen (X|L))
  91.  (unique_names (X|Seen) L)
  92. )
  93.  
  94. ((safe_load_clause L)
  95.  (xread L VarNames)
  96.  (if (unique_names VarNames)(true)
  97.      (and(display (unsafe L))(nl))
  98.  )
  99. )
  100.  
  101.